/*************************************************************************
                           Dictionnaire  -  description
                             -------------------
   
*************************************************************************/

//---------- Interface de la classe <Reseau> (fichier Reseau.h) ------
#if ! defined ( RESEAU_H )
#define RESEAU_H

//--------------------------------------------------- Interfaces utilisées
#include <string>
#include <iostream>
#include <fstream>

#include "Outils.h"

using namespace std;
//------------------------------------------------------------- Constantes

//------------------------------------------------------------------ Types

//------------------------------------------------------------------------
// Role de la classe <Reseau>
//
//------------------------------------------------------------------------

class Reseau
{
//----------------------------------------------------------------- PUBLIC

public:
//----------------------------------------------------- Méthodes publiques

    void Save ( ofstream & file );

    void Load ( ifstream & file );
    
    void AfficherNeuronesSortie();
    
    double * GetNeuronesSortie();
    
    void ConstruireReseau ();
    
    void ConstruireReseau ( double unPoids1[NEURONES_ENTREE][NEURONES_INTER], double unPoids2[NEURONES_INTER][NEURONES_SORTIE]);
    
//     void CalculerCoucheSortie(double infoCapteurs[1][50]);
    void CalculerCoucheSortie(double * infoCapteurs);
    
    double GetPoids1(int i,int j) { return poids1[i][j]; }
    
    double GetPoids2(int i,int j) { return poids2[i][j]; }
    
    void ModifierPoids1(int ligne, int colonne, double poids);
    
    void ModifierPoids2(int ligne,int colonne, double poids);


//------------------------------------------------- Surcharge d'opérateurs
    Reseau & operator = ( const Reseau & unReseau );

//-------------------------------------------- Constructeurs - destructeur

    Reseau ( const Reseau  & unReseau );
    
    Reseau ( );
    
    ~Reseau( );

//------------------------------------------------------------------ PRIVE

protected:
//----------------------------------------------------- Méthodes protégées
    
//----------------------------------------------------- Attributs protégés
    double couche_externe[1][NEURONES_ENTREE];
    double couche_cachee[1][NEURONES_INTER];
    double couche_sortie[1][NEURONES_SORTIE];
    double poids1[NEURONES_ENTREE][NEURONES_INTER];
    double poids2[NEURONES_INTER][NEURONES_SORTIE];
    double resultat[NEURONES_SORTIE];

};

//--------------------------- Autres définitions dépendantes de <Reseau>
#endif // CHAT_H

